package data;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;

import com.mysql.jdbc.Connection;

import util.ConnectionManager;
import domain.LineaPresupuesto;
import domain.Presupuesto;
import domain.Proyecto;

public class JDBCPresupuestoDao implements IPresupuestoDao {

	public boolean insertPresupuesto(Presupuesto p) {
		boolean b=false;
		ILineaPresupuestoDao lineadao = new JDBCLineaPresupuestoDao();
		ConnectionManager cm = ConnectionManager.getInstance();
		Connection con = (Connection) cm.checkOut();
		PreparedStatement sentencia = null;
		
		try{
			String sql = "INSERT INTO PRESUPUESTO (EPRID,PID,DESCRIPCION,VENTAJAS,NOMBRE) VALUES (?,?,?,?,?);";

			sentencia = con.prepareStatement(sql);
			sentencia.setInt(1,p.getEprId());
			sentencia.setInt(2, p.getPId());
			sentencia.setString(3, p.getDescripcion());
			sentencia.setString(4, p.getVentajas());
			sentencia.setString(5, p.getNombre());
			sentencia.executeUpdate();
		
			b=true;
		}
			
			
			/*Iterator<LineaPresupuesto> itl = p.getLineas().iterator();
			
			sql = "SELECT ID FROM PRESUPUESTOS WHERE PROYECTO = '"+p.getPId() +"' EMPRESA = '"+ p.getEprId()+"';";
			
			if(rs.next()){
				presupuesto = rs.getInt("ID");			
				
			}else{
				presupuesto =0;//Aqui se produce un error
			}
			
			while(itl.hasNext()){
				lineadao.insertLineaPresupuesto(itl.next(), presupuesto,con);				
			}
			
		} */
			
			
			catch (SQLException e) {
			System.out.println("Se ha producido un error en la base de datos");
			e.printStackTrace();
		} catch (Exception e) {
			System.out.println("Se ha producido un error al insertar un presupuesto");
			//e.printStackTrace();
		} finally {
			try {
				sentencia.close();
			} catch (SQLException e) {
				System.out.println("Fallo al cerrar la sentencia de insertar un presupuesto");
				//e.printStackTrace();
			}
			cm.checkIn(con);
		}
		return b ;
	}

	public List<Presupuesto> selectAllPresupuesto(int id) {
		List<Presupuesto> l = new LinkedList();
		ConnectionManager cm = ConnectionManager.getInstance();
		Connection con = (Connection) cm.checkOut();
		PreparedStatement sentencia = null;
		ResultSet rs = null;
		String sql = "SELECT * FROM PRESUPUESTO WHERE EPRID='"+id+"'";
		
		try{
			sentencia=con.prepareStatement(sql);
			rs=sentencia.executeQuery();
			while (rs.next()){
				Presupuesto temp = new Presupuesto();
				temp.setId(rs.getInt("ID"));
				temp.setEprId(id);
				temp.setPId(rs.getInt("PID"));
				temp.setDescripcion(rs.getString("DESCRIPCION"));
				temp.setVentajas(rs.getString("VENTAJAS"));
				temp.setNombre(rs.getString("NOMBRE"));
				l.add(temp);
				
			}
			
		}
		
		catch (SQLException e) {
			System.out.println("Se ha producido un error en la base de datos");
			//e.printStackTrace();
		} catch (Exception e) {
			System.out.println("Se ha producido al seleccionar un proyecto");
			//e.printStackTrace();
		} finally {
			try {
				rs.close();
			} catch (SQLException e) {
				System.out.println("Fallo al cerrar el resulset de seleccionar un proyecto");
				//e.printStackTrace();
			}
			try {
				sentencia.close();
			} catch (SQLException e) {
				System.out.println("Fallo al cerrar la sentencia de seleccionar un proyecto");
				//e.printStackTrace();
			}
			cm.checkIn(con);
		}
		
		return l;
	}

	public Presupuesto selectPresupuesto(int id) {
		Presupuesto p= new Presupuesto();
		ConnectionManager cm = ConnectionManager.getInstance();
		Connection con = (Connection) cm.checkOut();
		PreparedStatement sentencia = null;
		ResultSet rs = null;
		
		String sql = "SELECT * FROM PRESUPUESTO WHERE ID = '"+id+"'";
		try{
			
			sentencia = (PreparedStatement) con.prepareStatement(sql);
			rs = sentencia.executeQuery();
			if(rs.next()){
				
				p.setId(id);
				p.setDescripcion(rs.getString("DESCRIPCION"));
				p.setEprId(rs.getInt("EPRID"));
				p.setNombre(rs.getString("NOMBRE"));
				p.setPId(rs.getInt("PID"));
				p.setVentajas(rs.getString("VENTAJAS"));
				
				
			}
			
		} catch (SQLException e) {
			System.out.println("Se ha producido un error en la base de datos");
			//e.printStackTrace();
		} catch (Exception e) {
			System.out.println("Se ha producido al seleccionar un proyecto");
			//e.printStackTrace();
		} finally {
			try {
				rs.close();
			} catch (SQLException e) {
				System.out.println("Fallo al cerrar el resulset de seleccionar un proyecto");
				//e.printStackTrace();
			}
			try {
				sentencia.close();
			} catch (SQLException e) {
				System.out.println("Fallo al cerrar la sentencia de seleccionar un proyecto");
				//e.printStackTrace();
			}
			cm.checkIn(con);
		}
		return p;
	
	}

}
